#!/bin/bash

# 设置错误时退出
set -e

# 定义颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 打印带颜色的信息函数
print_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 从CMakeLists.txt中提取项目名称
get_project_name() {
    local cmake_file="CMakeLists.txt"
    if [ ! -f "$cmake_file" ]; then
        print_error "未找到 CMakeLists.txt 文件"
        exit 1
    fi
    
    # 使用grep查找project行，并提取项目名称
    local project_name=$(grep -m 1 "project(" "$cmake_file" | sed -E 's/project\(([^[:space:]]+).*\)/\1/')
    
    if [ -z "$project_name" ]; then
        print_error "无法从 CMakeLists.txt 中提取项目名称"
        exit 1
    fi
    
    echo "$project_name"
}

# 检查是否安装了必要的工具
check_requirements() {
    if ! command -v cmake &> /dev/null; then
        print_error "未找到 cmake，请先安装 cmake"
        exit 1
    fi
}

# 主函数
main() {
    # 获取脚本所在目录
    SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    BUILD_DIR="${SCRIPT_DIR}/build"
    
    # 获取项目名称
    PROJECT_NAME=$(get_project_name)
    print_info "项目名称: $PROJECT_NAME"
    
    # 检查并创建构建目录
    if [ -d "$BUILD_DIR" ]; then
        print_info "删除现有构建目录..."
        rm -rf "$BUILD_DIR"
    fi
    print_info "创建构建目录..."
    mkdir -p "$BUILD_DIR"
    
    # 进入构建目录
    cd "$BUILD_DIR"
    
    # 运行 CMake 配置
    print_info "运行 CMake 配置..."
    cmake ..
    
    # 编译项目
    print_info "编译项目..."
    cmake --build . --config Debug
    
    # 构建可执行文件路径
    EXECUTABLE="${BUILD_DIR}/Debug/${PROJECT_NAME}.exe"
    
    if [ ! -f "$EXECUTABLE" ]; then
        print_error "未找到可执行文件: $EXECUTABLE"
        exit 1
    fi
    
    print_info "找到可执行文件: $EXECUTABLE"
    print_info "开始运行程序..."
    
    # 运行可执行文件
    "$EXECUTABLE"
}

# 检查依赖
check_requirements

# 运行主函数
main
